#ifndef _IPMACSCAN_H_
#define _IPMACSCAN_H_

#include "common.h"
#include "ipmaclist.h"
#include <stdbool.h>

// 相关参数的定值
#define paraSize 100
// ARP扫描线程退出标志位
static bool arpExitFlag = true;

// IP访问其实地址计算
#define ipAddress(n) (n*4)
// MAC访问其实地址计算
#define macAddress(n) (n*6)

// 传递套接字和过滤链表的结构体
typedef struct ipmacifo
{
    int sockFd;
    char* netCard[paraSize/2]; // 存储网卡信息的字符串数据
    uc8* sourceIp; // ubantu下的源ip
    uc8* sourceMac; // ubantu下的源mac
    ipMac* ipMacHead; // 链接的所有IP和MAC的头结点
    ipMac* ipMacFilterHead; // 链接滤链表的头结点
    int ensCnt; //  计数访问不同网卡的数据
    pthread_t ptdfd; // 截取数据进行处理的线程号
}ipMacIfo;

// 不同网段数据交互时的目的IP和
typedef struct analyipdata{
    uc8* diffDstIp;
    uc8* diffDstData;
}analyIpData;

// 客户端请求功能数据结构体
typedef struct analyBufFunc{
    uc8* srcFuncIp;
    int FuncName;
    uc8* FuncAptData;
}bufAptData;


// 判断客户端请求
// 0:同一网段通信,1:不同网段通信,2:客户端请求路由器服务端的工能
extern int cliAcpFuncFlag;

int activeMacRead(char* macFilePath, char* macName);
void *rawSocket(void* data); // ip和mac线程处理
void *arpIpMacHandle(void* data);  //ARP请求/应答函数
int arpReply(ipMacIfo** ipMacData); // 处理ARP应答后,IP和MAC的解析
int appLayerForwardData(analyIpData* analyBufIpData); // 应用层转发消息
int replyMessage(bufAptData* funcReplyData, uc8* buf);

#endif